#include "Window.h"

Window::Window(WindowID type) : Container(0, 0, NULL) {
	this->type = type;
}

void Window::add(Widget *widget) {
	Container::add(widget);
}

void Window::showOn(SDL_Surface* surface) {
	for (it_widget = widgets.begin(); it_widget != widgets.end(); ++it_widget) {
		((Widget*) *it_widget)->showOn(surface);
	}
}

void Window::handleEvent(Event event) {
	for (it_widget = widgets.begin(); it_widget != widgets.end(); ++it_widget) {
		((Widget*) *it_widget)->handleEvent(event);
	}
}

void Window::resolve() {
	for (it_widget = widgets.begin(); it_widget != widgets.end(); ++it_widget) {
		((Widget*) *it_widget)->resolve();
	}
}

Window::~Window() {
	std::list<Widget*>::iterator it;
	for (it = this->widgets.begin(); it != this->widgets.end(); it++) {
		it = this->widgets.erase(it);
	}
}

WindowID Window::getWindowType(){
	return this->type;
}

//TODO Lo dejo por el tema de cambiar el tamaño de las ventanas. Despues hay que cambiarlo. NO LO ESTOY USANDO. Ceci
void Window::processEvent(Event event) {
	//TODO buscarle una mejor forma para detectar cuando cierra la ventana de
	//edicion y que vuelva a la pantalla inicial
	//	if (this->surface->getRectangleStruc().w == 1024
	//			&& this->surface->getRectangleStruc().h == 700 && event.getType()
	//			== Quit) {
	//		SDL_Event event;
	//		event.type = SDL_USEREVENT;
	//		event.user.code = load;
	//		event.user.data1 = 0;
	//		event.user.data2 = 0;
	//		SDL_PushEvent(&event);
	//
	//		SDL_Event event2;
	//		event2.type = SDL_VIDEORESIZE;
	//		event2.resize.w = LOAD_WIDTH_RESOLUTION;
	//		event2.resize.h = LOAD_HEIGHT_RESOLUTION;
	//		SDL_PushEvent(&event2);
	//	}
	//
	//	// Por si más adelante queremos manejar más de un listener por widget...
	//	for (std::list<Widget*>::iterator iter = this->widgets.begin(); iter
	//			!= this->widgets.end(); ++iter) {
	//		(*iter)->handleEvent(event);
	//	}
}

Container* Window::getScenarioContainer(){
	return container;
}

void Window::setScenarioContainer(Container* container){
	this->container = container;

	add(container);
}
